Korean Scala Hub

기술 글

Scala와 프로그래밍을 공부하고 사용하며 쌓은 지식과 경험을 공유합니다.

Scala 3 Capture Checking이 ZIO와 Cats Effect를 대체할 수 있을까?

Scala 3의 capture checking을 살펴보다 보면 자연스럽게 기존 effect library가 떠오른다. Scala에서는 이미 ZIO와 Cats Effect를 통해 side effect와 resource를 상당히 정교하게 다룰 수 있다. ZIO는 ZIO[R, E, A]라는 타입을 통해 computation이 어떤 environment를 필요로 하고 어떻게 실패하며 어떤 값을 반환하는지를 표현한다. Cats Effect는 IO와 Re…

조회 81 · 도움 0 · 비추천 0 · 댓글 0
작성자: 코딩!제이크

발행: 2026-08-17 수정 2026-08-17

Scala 3 Capture Checking과 Tracked Capabilities

Scala의 타입 시스템은 프로그램에서 값이 어떤 형태를 가지는지를 상당히 정교하게 표현할 수 있다. 어떤 함수가 String을 받아 Int를 반환하는지, 어떤 타입의 값을 사용할 수 있는지, 어떤 구현이 필요한지를 컴파일 단계에서 확인할 수 있다. 그런데 함수가 무엇을 반환하는지뿐 아니라 그 함수가 실행될 때 무엇에 접근할 수 있는지도 타입으로 표현할 수 있을까. 예를 들어 다음과 같은 함수가 있다고 하자. def readConfig(fs: …

조회 89 · 도움 0 · 비추천 0 · 댓글 0
작성자: 코딩!제이크

발행: 2026-08-17 수정 2026-08-17

cross-cutting concerns를 해결하기 위한 Aspect-oriented programming

안녕하세요. 코딩!제이크입니다. 오늘은 Cross-cutting concerns(횡단 관심사)와 이를 해결하기 위한 Aspect-oriented programming에 대해서 알아보겠습니다. cross-cutting concerns 소프트웨어 개발에서 여러 모듈이나 계층에 공통적으로 영향을 미치지만, 핵심 비즈니스 로직과는 직접적인 관련이 없는 기능들을 의미합니다. 이러한 기능들은 코드 전반에 걸쳐 “가로지르며 (cross-cutting) 나타…

조회 942 · 도움 0 · 비추천 0 · 댓글 0
작성자: 코딩!제이크

발행: 2025-07-11 수정 2025-07-11

스칼라 개발 환경에 대해서 소개할께요

오늘은 스칼라 언어를 사용하는 다양한 개발 환경에 대해 소개해 보려고 합니다. REPL (Read - Eval - Print Loop) 스칼라를 설치하면 터미널에서 사용할 수 있는 인터랙티브한 실행환경이에요. 대화형 셸이죠. 파이썬에서도 자주 사용하는 기능이라 많은 분들이 익숙하실 거에요. 간단한 계산, 함수 테스트, 코드 실험 등 다양한 용도로 활용됩니다. 이 툴도 계속 개선이 되면서 기능도 다양해지고 사용하기에 많이 편해진것 같아요. 저는 …

조회 983 · 도움 0 · 비추천 0 · 댓글 0
작성자: 코딩!제이크

발행: 2025-06-01 수정 2025-06-01

Scala 3 Given 세번째 - ad hoc polymorphism (애드혹 다형성)을 위한 타입클래스

스칼라 Given 세 번째 이야기 입니다. 오늘은 좀 더 깊이 있는 주제를 다루려고 합니다. 바로 다형성에 대한 내용입니다. 일반적으로 프로그래밍 언어에서 다형성(polymorphism)은 크게 세 가지 범주로 나눌 수 있습니다. 파라메트릭 다형성 (Parametric Polymorphism) 함수나 자료구조가 구체적인 타입에 의존하지 않고, 타입 파라미터를 통해 다양한 타입에 대해 동일한 로직으로 적용할 수 있게 하는 다형성으로 제네릭(gen…

조회 1138 · 도움 0 · 비추천 0 · 댓글 0
작성자: 코딩!제이크

발행: 2024-12-22 수정 2024-12-24

Scala 3 Given 두번째 - 컨텍스트 파라미터와 Given을 활용한 스칼라의 다형성 구현

이 글은 Programming in Scala Fifth Edition의 Given에 대해 Study 한 내용을 좀 더 자세히 풀어서 설명한 글입니다. 시작합니다. 컨텍스트 파라미터(Context Parameter)는 앞에 명시적으로 작성된 파라미터 목록에 대한 타입 관련 정보를 제공하는 목적으로 많이 사용됩니다. 스칼라에서 함수를 작성할 때 ad hoc polymorphism (특정 타입에 대한 다형성)을 얻기 위해 꼭 필요한 방법입니다. 작…

조회 1239 · 도움 0 · 비추천 0 · 댓글 0
작성자: 코딩!제이크

발행: 2024-10-21 수정 2024-12-21

Scala3 Given 첫번째 - 기본 사용법

함수의 동작은 이벤트가 일어나는 조건 또는 환경 (Context)에 따른 데이타와 알고리즘에 의존하며, 함수에 정보와 동작을 전달하는 다양한 방법 중 함수형 프로그래밍에서 전통적으로 사용하는 방식은 파라미터로 모든 것을 전달하는 것입니다. Functional behavior depends on -. Contextual data : System properties, Security permissions, Authenticated user, Dat…

조회 1309 · 도움 0 · 비추천 0 · 댓글 0
작성자: 코딩!제이크

발행: 2024-10-19 수정 2024-12-22

Scala 언어에서 case class에 final을 왜 붙히는 걸까?

Scala의 case class는 굉장히 유용하고 직관적인 기능을 제공하는데, 패턴 매칭을 지원하고 자동으로 생성자, toString, equals, hashCode 메서드를 생성해 주기 때문에, Scala 프로그래머들이 즐겨 사용하는 클래스 유형 중 하나입니다. 하지만 case class를 사용할 때, 클래스 앞에 final을 붙여야 하는지 고민하는 경우가 있습니다. 이 글에서는 final 키워드를 왜, 언제 사용해야 하는지, 그리고 실제로 …

조회 1094 · 도움 0 · 비추천 0 · 댓글 0
작성자: 코딩!제이크

발행: 2024-10-01 수정 2024-10-01

스칼라 타입시스템에대해 공부해야 할 것들

안녕하세요. 코딩!제이크입니다. 드디어 스칼라 타입 시스템에 대해서 이야기를 하게 되었습니다. 스칼라의 타입 시스템은 개발자가 더 안전하고 효율적인 코드를 작성할 수 있도록 돕는 중요한 도구입니다. 특히, 강력한 정적 타입 검사와 타입 추론을 통해 컴파일 시점에서 많은 오류들을 잡아주고 간결한 코드 작성을 가능하게 합니다. 이 글에서는 스칼라 타입 시스템에 대한 아웃라인을 먼저 정리해서 우리가 어떤 것들을 공부해야 하는지 알아 보겠습니다. 1.…

조회 1182 · 도움 0 · 비추천 0 · 댓글 0
작성자: 코딩!제이크

발행: 2024-08-16 수정 2024-08-16

스칼라의 동시성 프로그래밍 - 비동기 방식을 지원하는 Monad의 대표적인 함수 Future와 flatMap, for comprehension의 활용

Monad의 대표적인 함수인 Future와 flatMap, for comprehension 사용 방법에 대해서 알아보겠습니다. Future는 스칼라에서 제공하는 동시성 프로그래밍을 위한 객체로 비동기 방식을 통해 동시성 처리 방식을 제공하고 있습니다. 동시성 프로그래밍과 동기화(Synchronous) 방식, 비동기(Asynchronous) 방식에 대해서는 글 하나에 모두 담을 수 없는 주제이기 때문에 추후에 다른 글에서 심도 있게 다루기로 하고…

조회 1438 · 도움 2 · 비추천 0 · 댓글 0
작성자: 달빛제이크

발행: 2024-07-28 수정 2024-10-28

스칼라 함수형 프로그래밍 러닝커브의 주역!! 모나드와 주요 연산자를 소개합니다.

안녕하세요. 달빛제이크입니다. 오늘은 스칼라 함수형 프로그래밍의 러닝 커브를 매우 가파르게 만들어 스칼라가 어렵다는 인식을 널리 퍼뜨린 바로 그 주인공 모나드에 대해 소개하겠습니다. 프로그래밍 언어를 Skill로서 사용하는 것은 경험이 쌓이면서 익숙해지지만, 그 언어가 도입한 개념에 대해 아는 것은 수학적 이해가 필요한 만큼 많이 어렵습니다. 그럼에도 불구하고 모나드에 대해 이해하려는 노력은 모나드가 순수 함수형 프로그래밍의 핵심적인 개념이기 …

조회 1306 · 도움 1 · 비추천 0 · 댓글 0
작성자: 달빛제이크

발행: 2024-07-07 수정 2024-07-19

함수형 프로그래밍에서 이터레이터와 함수형 변환 - foreach, map, for 표현식의 이해와 활용

안녕하세요. 달빛제이크입니다. 함수형 프로그래밍에서 이터레이터와 함수형 변환을 foreach, map, for 표현식을 사용해서 구현해 보겠습니다. 지난 글 스칼라에서 지원하는 고차 함수에서 foreach에 대한 사용법을 설명 드렸었는데, 이번에는 map, for 표현식과 함께 다양한 예제를 다루어보려고 합니다. 1. 이터레이팅을 위한 foreach foreach는 IterableOnceOps 트레이트에 선언되어 있는 메소드 중에 하나로, 모든…

조회 770 · 도움 0 · 비추천 0 · 댓글 0
작성자: 달빛제이크

발행: 2024-06-30 수정 2024-06-30

스칼라의 By-value parameter(값에 의한 파라미터), By-name parameter (이름에 의한 파라미터)의 개념과 활용 예시

안녕하세요. 달빛제이크입니다. 이번 글에서는 스칼라 언어에서 지원하는 파라미터의 종류에 대해 살펴보겠습니다. 스칼라에서 지원하는 파라미터의 종류에는 크게 두 가지가 있습니다. 하나는 우리가 항상 예제에서 봤던 By-value parameter, 값에 의한 파라미터이고, 다른 하나는 By-name parameter, 이름에 의한 파라미터입니다. 두 파라미터의 차이점에 대해서 알아보고 이름에 의한 파라미터의 개념과 활용 방법에 대해 이야기하겠습니다…

조회 520 · 도움 0 · 비추천 0 · 댓글 0
작성자: 달빛제이크

발행: 2024-06-29 수정 2024-06-29

스칼라 함수형 프로그래밍 - 커링(Currying)이 불러온 착각. 언어가 기본 지원하는 제어 구조 처럼 보이는 제어 추상화

안녕하세요. 달빛제이크입니다. 스칼라 코드를 보면 분명 함수이고 소괄호 '()' parentheses로 묶여 전달되어야 할 인수 부분에 중괄호 '{}' curly braces와 함께 긴 코드가 적혀있는 모습을 많이 볼 수 있습니다. 어떤 형태는 소괄호에 묶여 일부 인수가 전달되고, 그 뒤를 따라 중괄호에 마찬가지로 긴 코드가 작성되어 있습니다. 처음 스칼라로 코딩을 할 때 도대체 이런 형태가 어떻게 가능한지, 스칼라에서는 이렇게도 작성할 수 있…

조회 507 · 도움 0 · 비추천 0 · 댓글 0
작성자: 달빛제이크

발행: 2024-06-28 수정 2024-06-29

스칼라에서 지원하는 고차 함수 - 간결한 코드로 강력한 기능 구현하기

안녕하세요. 달빛제이크입니다. 고차 함수는 다른 함수를 인수로 받거나, 함수를 반환하는 함수를 말하고, 스칼라에서는 함수 값(Function value)을 통해 고차 함수를 구현할 수 있습니다. 고차 함수를 API로 제공하면 클라이언트 코드를 보다 간결하게 만들 수 있는데, 스칼라에서는 막강한 기능을 가진 고차 함수들을 다양하게 제공하고 있어 간결한 코드 구현이 가능합니다. 특히 반복 작업이 필요한 Collection에서 매우 유용하게 활용할 …

조회 465 · 도움 0 · 비추천 0 · 댓글 0
작성자: 달빛제이크

발행: 2024-06-27 수정 2024-06-30

스칼라 함수형 프로그래밍 - 제어 추상화를 위한 고차함수의 개념과 활용 (Higher-order functions for Control Abstraction)

안녕하세요. 달빛제이크입니다. 오늘은 스칼라 함수형 프로그래밍에서 제어 추상화를 구현하기 위한 고차함수(Higher-order function)에 대해서 알아보겠습니다. 1. 제어 추상화 (Control abstractions) 스칼라 언어에서는 문법 상으로 지원하는 제어 구조 (Control structures)가 if, while, for, try, match 다섯 가지로 많지 않습니다. 스칼라 문법 상으로 지원하는 이 소수의 제어 구조를 …

조회 505 · 도움 0 · 비추천 0 · 댓글 0
작성자: 달빛제이크

발행: 2024-06-25 수정 2024-06-29

스칼라 함수형 프로그래밍 - Tail recursion (꼬리 재귀 함수)의 이해와 활용. 함수형 프로그래밍 방식에서는 While loop 대신에 Tail recursion!!

안녕하세요. 달빛제이크입니다. 이번 글에서는 Tail recursion 꼬리 재귀 함수에 대해서 알아 보겠습니다. 스칼라 함수가 제공하는 특별한 기능을 주제로 Repeated Parameter(반복 매개변수), Named arguments(이름 지정 인수), Default parameter values(기본 매개변수 값), SAM (Single Abstract Method, 단일 추상 메소드)에 이어서 Tail recusion(꼬리 재귀 함수)…

조회 513 · 도움 0 · 비추천 0 · 댓글 0
작성자: 달빛제이크

발행: 2024-06-19 수정 2024-06-21

스칼라 함수형 프로그래밍 - SAM (Single abstract method)의 이해와 활용 (단일 추상 메소드를 람다 표현식으로 구현할 수 있어요.)

안녕하세요. 달빛제이크입니다. 지난 글에서는 함수가 제공하는 특별한 기능으로 Repeated parameters, Named arguments, Default parameter values에 대해서 알아보았습니다. 이번 글에서는 SAM (Single abstract method, 단일 추상 메소드)에 대해서 살펴보겠습니다. 1. SAM (Single Abstract Method, 단일 추상 클래스) JAVA를 공부하신 분들은 Swing으로 UI…

조회 537 · 도움 0 · 비추천 0 · 댓글 0
작성자: 달빛제이크

발행: 2024-06-17 수정 2024-06-21

스칼라 함수 파라미터의 다양한 형식과 함수 호출 방법 - 반복 매개변수 (Repeated parameter), 이름 지정 인수 (Named arguments), 기본 인수 (Default arguments)

안녕하세요. 달빛제이크입니다. 이번 글에서는 함수 파라미터의 다양한 형식과 호출 방법에 대해서 알아보겠습니다. 함수 파라미터를 선언할 때는 보통 변수 이름에 타입을 지정하여 작성하는데, 스칼라 언어는 이와 같은 기본 형식 외에 추가로 세 가지 형식을 더 지원합니다. 1. Repeated parameters : 반복 매개변수, 반복 파라미터 2. Named arguments : 이름을 지정한 인수, 명명된 인수, 이름 지정 인수, 이름을 지정한 …

조회 488 · 도움 0 · 비추천 0 · 댓글 0
작성자: 달빛제이크

발행: 2024-06-15 수정 2024-06-21

불러오는 중